695 岛屿的最大面积 
// 给你一个大小为 m x n 的二进制矩阵 grid 。
// 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
// 岛屿的面积是岛上值为 1 的单元格的数目。
// 计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
// 示例 1:
// 输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] // 输出:6 // 解释:答案不应该是 11 ,因为岛屿只能包含水平或垂直这四个方向上的 1 。 // 示例 2:
// 输入:grid = [[0,0,0,0,0,0,0,0]] // 输出:0
js
const maxAreaOfIsland = function (grid) {
  if (!grid || grid.length === 0 || grid[0].length === 0) return 0;
  let count = 0;
  let row = grid.length;
  let column = grid[0].length;
  for (let i = 0; i < row; i++) {
    for (let j = 0; j < column; j++) {
      if (grid[i][j] === 1) {
        count = Math.max(count, dfs(grid, i, j));
      }
    }
  }
  return count;
  function dfs(grid, i, j) {
    // 如果试图探索的范围已经越界,则return
    if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] === 0) return 0;
    // 遍历过的坑位都置0,防止反复遍历
    grid[i][j] = 0;
    // 遍历完当前的1,继续上下左右寻找下一个1,面积+1
    return 1 + dfs(grid, i + 1, j) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i, j - 1);
  }
};1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26